import torch

# torch.empty和torch.zeros的主要区别在于初始化方式和对内存的处理。
#
# 1.初始化方式：
# torch.zeros：创建一个指定大小的张量，并将所有元素初始化为0。例如，torch.zeros([2, 3])会创建一个2行3列的全0张量
# torch.empty：创建一个指定大小的张量，但不会对张量的元素进行初始化。张量中的元素值是随机的，取决于张量所在内存的状态
#
# 2.内存处理：
# torch.zeros：在创建张量时，会立即将所有元素初始化为0，这可能会导致一定的性能开销，尤其是在创建大型张量时
# torch.empty：不会立即初始化内存中的值，因此创建速度更快，尤其是在后续步骤会立即填充这个张量的情况下，使用torch.empty可以节省初始化为0的时间
#
# 3.使用场景：
# torch.zeros：适用于需要明确初始化为0的场景，或者在创建后不会立即进行其他操作的张量。
# torch.empty：适用于需要快速创建张量并在后续步骤中立即进行填充的场景，可以显著提高性能。

t1 = torch.empty(2, 3)

print(t1)
# tensor([[-2.1118e+14,  1.9758e-42,  0.0000e+00],
#         [ 0.0000e+00,  0.0000e+00,  0.0000e+00]])

t2 = torch.zeros(2, 3)

print(t2)
# tensor([[0., 0., 0.],
#         [0., 0., 0.]])


